小弟剛從大學畢業、當兵退伍後,目前決定找尋網頁開發相關工作,除了實務開發外希望理論能夠扎實完備,以防面試一問三不知(現在就是這個狀況Orz)。如果各位讀者有看到覺得不對、錯誤的地方歡迎指正,謝謝大家指教! :-)
伺服器端與用戶端app
伺服器端app(Server-side rendering): SSR,指的是網頁應用程式中的網頁由伺服器算繪後再送到用戶端的瀏覽器。
用戶端app(client-side rendering): CSR,通常用戶端app被稱為單頁app(SPA),伺服器發給瀏覽器一次包裹含有(HTML、CSS、JavaScript、靜態資源)後,接下來介面的更換是利用JavaScript來動態修改DOM,不需要依靠伺服器顯示新網頁。
伺服器端app與用戶端app之間有一些模糊的界線,用戶端app很難只靠一次伺服器請求將全部需要的資源都拿到,有需要的時候仍需要向伺服器發出請求。
什麼是Express?
Express是一種Node.js web app框架,為web和行動app提供穩健的功能組,具備極簡、靈活、快速的特質。
Express做的事情其實很簡單,用戶端向伺服器發出HTTP請求後,Express要決定該如何回應(利用請求、回應物件、中介軟體)。
另外Express不會管你做的是SSR還是SPA,它可以作為伺服器算繪直接回傳到瀏覽器,也能作為API替SPA提供需要的資料。
請求與回應物件
用Express建構web伺服器時,事情幾乎都是起於請求物件,終於回應物件。
URL的各個部份
協定 : https://
主機名稱 : google.com 、localhost、 www.bing.com
連接埠 : 3000
路徑 : /about、/home
查詢字串 : ?quantity=2&price=1000
片段識別符號 : #history
HTTP請求方法
HTTP協定定義了一套請求方法(POST、GET、DELETE、PATCH...等),可讓用戶端與伺服器進行溝通,當你在瀏覽器輸入URL時,瀏覽器就會發出一個GET請求給伺服器。而我們的app根據請求方法、URL及其查詢字串進來決定該如何回應。平常都是使用GET與POST(處理表單、資訊回傳),但是也可以向API發出DELETE、PATCH等請求,用於刪除及更新資料。
請求物件
請求處理式的第一個參數(通常被取名為req)。是核心的Node物件。
請求物件有許多實用的屬性與方法包括 :
req.params : 含有具名路由參數的陣列。
req.query : 一種物件,含有查詢字串參數(名稱、值)。
req.body : 使用者發出POST請求後,附帶的資料會被放在body物件中,必須使用可以解析內文內容類型的中介函式才能使用。
req.cookies : 有用戶端傳來的cookie值。
req.headers : 從用戶端收到的請求標頭。
回應物件
請求處理式的第二個參數(通常被取名為res)。也是核心的Node物件。
res.status(code) : 設定HTTP狀態碼。預設值是200(OK),另外還有404(Not Found)、500(Server Error)...等。值得注意的一點是,status可回傳回應物件,可以在status後面接上send()。
res.cookie(name, value, [options]) : 設定存放在用戶端的cookie。
res.redirect([status], url) : 轉址瀏覽器,預設的轉址碼是302。盡量減少轉址的次數。
res.send(body) : 傳送回應給用戶端,預設的內容類型是text/html。
res.json(json) : 將json送給用戶端。
res.format(object) : 根據Accept請求標頭傳送不同的內容。
res.locals : 是一個包含算繪view的預設背景的物件。